package com.xp.dto;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;

/**
 * 节点定义数据传输对象
 * 用于前后端数据传输
 *
 * @author xp
 * @since 2024-01-01
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class NodeDefinitionDTO {

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 节点编码
     */
    private String nodeCode;

    /**
     * 节点名称
     */
    private String nodeName;

    /**
     * 节点描述
     */
    private String nodeDesc;

    /**
     * 节点类型
     */
    private String nodeType;

    /**
     * 节点类型名称
     */
    private String nodeTypeName;

    /**
     * 节点分类
     */
    private String category;

    /**
     * 节点分类名称
     */
    private String categoryName;

    /**
     * 节点图标
     */
    private String icon;

    /**
     * 节点颜色
     */
    private String color;

    /**
     * 组件类名
     */
    private String componentClass;

    /**
     * 输入参数Schema
     */
    private String inputSchema;

    /**
     * 输出参数Schema
     */
    private String outputSchema;

    /**
     * 配置参数Schema
     */
    private String configSchema;

    /**
     * 默认配置
     */
    private String defaultConfig;

    /**
     * 脚本模板
     */
    private String scriptTemplate;

    /**
     * 版本号
     */
    private String version;

    /**
     * 状态
     */
    private Integer status;

    /**
     * 状态名称
     */
    private String statusName;

    /**
     * 是否系统内置
     */
    private Integer isSystem;

    /**
     * 排序顺序
     */
    private Integer sortOrder;

    /**
     * 创建人ID
     */
    private Long creatorId;

    /**
     * 创建人名称
     */
    private String creatorName;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 是否可编辑（系统内置节点不可编辑）
     */
    private Boolean editable;

    /**
     * 是否可删除（系统内置节点不可删除）
     */
    private Boolean deletable;

    /**
     * 输入参数配置（解析后的JSON对象）
     */
    private Object inputConfig;

    /**
     * 输出参数配置（解析后的JSON对象）
     */
    private Object outputConfig;

    /**
     * 节点配置（解析后的JSON对象）
     */
    private Object nodeConfig;

    /**
     * 默认配置（解析后的JSON对象）
     */
    private Object defaultConfigObj;
}